package com.google.code.lf.gfm.model.grisbi.compte;

import java.math.BigDecimal;
import java.util.Date;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

import com.google.code.lf.commons.util.ToStringHelper;
import com.google.code.lf.commons.xml.bind.adapter.XmlBigDecimalAdapter;
import com.google.code.lf.commons.xml.bind.adapter.XmlDateAdapter;

/**
 * Bean représentant une opération d'un compte dans le fichier de données <a href="http://grisbi.org/">Grisbi</a>.
 * <br/>Le binding bean/xml utilise <a href="https://jaxb.dev.java.net/">JAXB</a>.
 * 
 * @see Compte.
 */
@XmlRootElement(name="Operation")
@XmlAccessorType(XmlAccessType.NONE)
@SuppressWarnings("unused")
public class Operation {
	// Rmq sur les XmlAttribute : l'ordre affiché est l'inverse de l'ordre déclaré...

	@XmlAttribute(name="Va")
	private int vA;

	@XmlAttribute(name="Rc")
	private int rC;

	@XmlAttribute(name="Ro")
	private int rO;

	@XmlAttribute(name="Ibg")
	private String iBg;

	@XmlAttribute(name="Pc")
	private String pC;

	@XmlAttribute(name="Si")
	private int sI;

	@XmlAttribute(name="I")
	private int i;

	@XmlAttribute(name="E")
	private int e;

	@XmlAttribute(name="R")
	private int r;

	@XmlAttribute(name="A")
	private int a;

	@XmlAttribute(name="P")
	private int p;

	@XmlAttribute(name="Ct")
	private String cT;

	@XmlAttribute(name="Ty")
	private int idType;

	@XmlAttribute(name="N")
	private String notes;

	@XmlAttribute(name="Ov")
	private int oV;

	@XmlAttribute(name="Sc")
	private int idSousCategorie;

	@XmlAttribute(name="C")
	private int idCategorie;

	@XmlAttribute(name="T")
	private int idTiers;

	@XmlAttribute(name="Fc")
	@XmlJavaTypeAdapter(XmlBigDecimalAdapter.class)
	private BigDecimal fC;

	@XmlAttribute(name="Tc")
	@XmlJavaTypeAdapter(XmlBigDecimalAdapter.class)
	private BigDecimal tC;

	@XmlAttribute(name="Rdc")
	private int rDC;

	@XmlAttribute(name="De")
	private int dE;

	@XmlAttribute(name="M")
	@XmlJavaTypeAdapter(XmlBigDecimalAdapter.class)
	private BigDecimal montant;

	@XmlAttribute(name="Db")
	@XmlJavaTypeAdapter(XmlDateAdapter.class)
	private Date dateValeur;

	@XmlAttribute(name="D")
	@XmlJavaTypeAdapter(XmlDateAdapter.class)
	private Date date;

	@XmlAttribute(name="Id")
	private String id;

	@XmlAttribute(name="No")
	private long numero;

	/**
	 * Méthode <code>toString()</code> utilisant la réflection pour détailler l'objet.
	 * 
	 * @see ToStringHelper#toString()
	 */
	@Override
	public String toString() {
		return ToStringHelper.toString(this);
	}

	// -- Getters / Setters

	/**
	 * @return {@link Operation#id}.
	 */
	public String getId() {
		return id;
	}
	/**
	 * @param Le {@link Operation#id} à modifier.
	 */
	public void setId(final String id) {
		this.id = id;
	}

	/**
	 * @return {@link Operation#idTiers}.
	 */
	public int getIdTiers() {
		return idTiers;
	}
	/**
	 * @param Le {@link Operation#idTiers} à modifier.
	 */
	public void setIdTiers(final int idTiers) {
		this.idTiers = idTiers;
	}

	/**
	 * @return {@link Operation#idCategorie}.
	 */
	public int getIdCategorie() {
		return idCategorie;
	}
	/**
	 * @param idCategorie Le {@link Operation#idCategorie} à modifier.
	 */
	public void setIdCategorie(final int idCategorie) {
		this.idCategorie = idCategorie;
	}

	/**
	 * @return {@link Operation#idSousCategorie}.
	 */
	public int getIdSousCategorie() {
		return idSousCategorie;
	}
	/**
	 * @param idSousCategorie Le {@link Operation#idSousCategorie} à modifier.
	 */
	public void setIdSousCategorie(final int idSousCategorie) {
		this.idSousCategorie = idSousCategorie;
	}
}
